Bauteil einlernen
In diesem Schritt wird das automatische Training verfeinert und optimiert. Daie Benutzeroberfläche ist wie folgt gegliedert:
Die obere Menüleiste dient zum Aufnehmen neuer Bilder und zur Reinspektion nach Änderung der Werkzeuge:
Die Ergebnistabelle dient zur Diagnose erkannter Kandidaten und unterstützt beim Finden der richtigen Prüfparameter.
Hinweis: Während dem Editieren von Prüfbereichen, kann mit einem Klick auf ein Bauteil in der Tabelle auf dessen Bereiche umgeschalten werden.
In diesem Schritt kann der Ablauf für die Suche der Bauteilkonturen optimiert werden. Es stehen 3 Modi zur Auswahl:
| Modus | Kandidatensuche | Freiraum- und Detailprüfung |
|---|---|---|
| Standard Teile | -180° bis + 180° | Statisch bei gefundener Position |
| Runde Teile | 0° | Mehrfach: Gefundene Position + ein vielfaches der eingegebenen Winkelteilung, bis der Kandidat in Ordnung ist oder 360° erreicht wurden |
| Symetrische Teile | -180° bis + 180° |
Hinweis: Der Suchbereich der Bauteilkontur sollte mit
angepasst werden. Eine Reduktion des Suchbereichs führt zu einer direkt proportionalen Abnahme des Teiledurchsatzes!
Wichtig: Die Einschränkung des Aufgreifbereiches sollten über die integrierte Kollisionsprüfung realisiert werden, um den Taktzeitverlust möglichst gering zu halten.
Wichtig: Die Positions- und Winkelkorrektur mittels zweiter Stufe ist ein Advanced-Parameter, welcher in 99% der Fälle nicht notwendig ist.Sie ist hilfreich, wenn die Position des Bauteiles im ersten Schritt nicht eindeutig gefunden werden kann. Die zweite Stufe führt dann eine Feinsuche mittels zusätzlichem Merkmal aus.
Hinweis: Mit
ist es möglich die Anzahl an zu greifenden Teilen pro Erkennungsdurchgang zu limitieren. Dies führt zu einer Steigerung der Taktzeit, wenn sehr viele Teile am Feeder liegen und mit jedem Durchgang ein neues Bild erzwungen wird. Die Erkennungsroutine bricht bei erreichen der gewünschten Anzahl an greifbaren Teilen ab.
Parameter 'Bauteil Ausrichtung (1. Stufe)
Die Parameter für die Freibereichen werden im unteren Bereich des Prüfschritte-Leiste angezeigt:
Aufgreifpunkt per Roboter berechnen
Die Ermittlung des Aufgreifpunktes erfolgt durch unser hoch genaues BestPick Verfahren.
Hinweis: Dieser Automatismus bietet die höchstmögliche Genauigkeit bei gleichzeitig kurzer Inbetriebnahmezeit.
-
Das Bauteil wird in der gewünschten Position in den Robotergreifer eingelegt.
-
Der Roboter legt das Bauteil mittig am leeren Feeder ab.
-
Achten Sie darauf, dass das Bauteil bei der Ablage nicht verrutscht.
-
-
Tragen Sie die Ablage Koordinaten in die Felder X, Y, Rz (in °) ein.
-
Entfernen Sie den Roboter aus dem Kamerasichtfeld.
-
Nehmen Sie ein neues Bild
auf und kontrollieren Sie, ob das Bauteil richtig erkannt wurde. -
Wird das Bauteil grün markiert, dann können Sie die BestPick Berechnung
starten. Am Ende wird das Bild aktualisiert und der neue Aufgreifpunkt angezeigt.
Hinweis: Die BestPick Berechnung kann über die Feldbus Schnittstelle automatisiert werden.
Aufgreifpunkt manuell definieren
Hinweis: Für spezielle Sonderfälle ist ein manuelles Festlegen des Aufgreifpunktes sinnvoll.
Der Aufgreifpunkt kann mittels
manuell gesetzt werden. Wenn Durchlicht und Auflicht verwendet werden, dann kann die Berechnung wahlweise auf einem der beiden Bilder durchgeführt werden.
Aufgreifwinkel limitieren
Der Aufgreifpunkt lässt sich per
limitieren und begrenzen. Diese Funktion ist hilfreich, wenn der Roboter nicht alle Greifwinkel aufnehmen kann.
Hinweis: Die Einschränkung der Aufgreifwinkel für zu einer direkt proportionalen Verringerung des Durchsatzes.
Ermöglicht zusätzliche Kontrollen rund um die gefundene Bauteil Position:
-
Kollisionsvermeidung der Greiferstörkontur mit Bauteilen
-
Erkennen beieinander liegender oder verhakter Teiler
Hinweis: Jede Prüfung kann wahlweise im Auflicht oder Durchlicht ausgeführt werden.
Hinweis: Die integrierte Symmetrieunterstützung ermöglicht eine intelligente Prüfung von symmetrischen oder runden Teilen.
Freibereich 1 wird bei beim automatischen Training als Polygonpfad erstellt und soll sicherstellen, dass sich überlappende Teile erkannt werden.
Freibereich 2-5 stehen für zusätzliche Greifer-Freibereiche zur verfügen, um sicherzustellen, dass der Greifer nicht mit Bauteilen auf der Plattform kollidiert.
Einlernvorgang
-
Gewünschten Bereich aktivieren.
-
Für jeden Freibereich kann wahlweise zwischen Durchlicht und Auflicht gewechselt werden.
-
Sollten mehrere Bauteile im Bild sichtbar sein, dann muss beim Einlernen das gewünschte Bauteil in der Tabelle ausgewählt.
-
Nehmen Sie ein neues Bild
auf und kontrollieren Sie, ob das Bauteil richtig erkannt wurde.
Wichtig: Sollten mehrere Bauteile im Bild sichtbar sein, dann muss beim Einlernen das gewünschte Bauteil in der Tabelle ausgewählt werden.
Parameter
Die Parameter für die Freibereichen werden im unteren Bereich des Prüfschritte-Leiste angezeigt:
Beispiel
In diesem Beispiel sind Freibereich 1, 2, und 3 aktiv:
-
Freibereich 1: Prüfung um das Bauteil auf Berührung bzw. Überlappung mit anderen Bauteilen.
-
Freibereich 2+3: Bilden den Zweifinger-Greifer des Roboters nach und prüfen die Kollision des Greifers mit anderen Bauteilen.
Die Detailprüfung dient zur Lagekontrolle des Bauteile:
-
Liegt das Bauteil richtig oder falsch. z.B. Bauch oder Rücken
-
Sollte eine Typendurchmischung möglich sein, kann diese in der Bauteilprüfung erkannt werden
Die Flächenkontrolle verwendet helle oder dunkle Flächen im Prüffenster für die Erkennung der richtigen Lage.
Hinweis: Diese Prüfung kann wahlweise im Auflicht oder Durchlicht ausgeführt werden.
Hinweis: Die integrierte Symmetrieunterstützung ermöglicht eine intelligente Prüfung von symmetrischen oder runden Teilen.
Einlernvorgang
-
Prüfschritt aktivieren.
-
Für die Prüfung kann wahlweise zwischen Durchlicht und Auflicht gewechselt werden.
-
Sollten mehrere Bauteile im Bild sichtbar sein, muss beim Einlernen das gewünschte Bauteil in der Tabelle ausgewählt werden.
-
Nehmen Sie ein neues Bild
auf und kontrollieren Sie, ob das Bauteil richtig erkannt wurde.
Parameter
Die Parameter für die Prüfung werden im unteren Bereich des Prüfschritte-Leiste angezeigt:
Beispiel
In diesem Beispiel wird ein Merkmal des Bauteiles auf Vorhandensein geprüft, um bei Vermischung unterschiedlicher Typen, nur den gewünschten zu greifen.Dazu wurde das Prüffenster auf einem eindeutigen Merkmal platziert.
Fenster:
Parameter:
Richtige Type:
Falsche Type:
Die Detailprüfung dient zur Lagekontrolle des Bauteile:
-
Liegt das Bauteil richtig oder falsch. z.B. Bauch oder Rücken
-
Sollte eine Typendurchmischung möglich sein, kann diese in der Bauteilprüfung erkannt werden
Die Musterkontrolle verwendet einen Konturvergleich im Prüffenster für die Erkennung der richtigen Lage.
Hinweis: Diese Prüfung kann wahlweise im Auflicht oder Durchlicht ausgeführt werden.
Hinweis: Die integrierte Symmetrieunterstützung ermöglicht eine intelligente Prüfung von symmetrischen oder runden Teilen.
Einlernvorgang
-
Prüfschritt aktivieren.
-
Für die Prüfung kann wahlweise zwischen Durchlicht und Auflicht gewechselt werden.
-
Sollten mehrere Bauteile im Bild sichtbar sein, dann muss beim Einlernen das gewünschte Bauteil in der Tabelle ausgewählt.
-
Unter 'Suche' den Suchbereich definieren. Diesen möglichst klein halten, um Fehlerkennungen zu vermeiden.
-
Unter 'Training'
-
Nehmen Sie ein neues Bild
auf und kontrollieren Sie, ob das Bauteil richtig erkannt wurde.
Parameter
Die Parameter für die Prüfung werden im unteren Bereich des Prüfschritte-Leiste angezeigt:
Beispiel
In diesem Beispiel wird ein Merkmal des Bauteiles auf Vorhandensein geprüft, um bei Vermischung unterschiedlicher Typen, nur den gewünschten zu greifen. Dazu wurde das Prüffenster auf einem eindeutigen Merkmal platziert.
Suchbereich:
Trainingsbereich:
Parameter:
Richtige Type:
Falsche Type:
Die Detailprüfung dient zur Lagekontrolle des Bauteile:
-
Liegt das Bauteil richtig oder falsch. z.B. Bauch oder Rücken
-
Sollte eine Typendurchmischung möglich sein, kann diese in der Bauteilprüfung erkannt werden
Die Klassifizierung verwendet einen Edge Learning Algorithmus für die Erkennung der richtigen Lage und eignet sich besonders gut für die Unterscheidung von Bildern mit starken Schwankungen oder komplexen Merkmalen.
Wichtig: Die Klassifizierung ist ab EasySightPro 11.0 gegen Aufpreis möglich.
Hinweis: Diese Prüfung kann wahlweise im Auflicht oder Durchlicht ausgeführt werden.
Hinweis: Die integrierte Symmetrieunterstützung ermöglicht eine intelligente Prüfung von symmetrischen oder runden Teilen.
Einlernvorgang
-
Prüfschritt aktivieren.
-
Für die Prüfung kann wahlweise zwischen Durchlicht und Auflicht gewechselt werden.
-
Mit
kann unter Training der Trainingsbereich verändert werden.-
Der Trainingsbereich entspricht im Prozess dem Suchbereich
-
Jede Änderung führt zu einer Rücksetzung des Training
-
-
Als nächstes mehrere Bauteile in richtiger Lage auflegen.
-
Nehmen Sie ein neues Bild
auf und kontrollieren Sie, ob das Bauteil richtig erkannt wurde. -
Die Bauteile in der Tabelle mit rechter Maus als
IO klassifizieren
-
Als nächstes mehrere Bauteile in falschen Lagen auflegen.
-
Nehmen Sie ein neues Bild
auf und kontrollieren Sie, ob das Bauteil richtig erkannt wurde. -
Die Bauteile in der Tabelle mit rechter Maus als
NIO klassifizieren
-
Nehmen Sie ein neues Bild
auf und kontrollieren Sie, ob das Bauteil richtig erkannt wurde.
Wichtig: Für eine stabile Erkennung sind mindestens zwei IO und 2 NIO Bauteile notwendig.
Parameter
Die Parameter für die Prüfung werden im unteren Bereich des Prüfschritte-Leiste angezeigt:
Beispiel
In diesem Beispiel wird ein Merkmal des Bauteiles auf Vorhandensein geprüft, um bei Vermischung unterschiedlicher Typen, nur den gewünschten zu greifen. Dazu wurde das Prüffenster auf einem eindeutigen Merkmal platziert.
Trainingsbereich:
Parameter:
Richtige Type:
Falsche Type:
Durch diesen Schritt können kundenspezifische Prüfungen an Bauteil durchgeführt und das Ergebnis als ID aufgegeben werden.
-
Qualitätskontrolle direkt am Feeder
-
Typenunterscheidung bei Teilen mit gleicher Kontur
-
Zusätzliche Validierung der Greifbarkeit
Wichtig: Dieses Werkzeug kann nur im Experten Modus bearbeitet werden.
Voraussetzungen/Anforderungen:
-
Dieser Schritt wird nur bei greifbaren Teilen ausgeführt. Schlägt eine vorhergehende Prüfung fehl, dann wird 'Custom ID' nicht ausgeführt
-
Integration der Prüfung über einen CogToolBlock. Es wird empfohlen ein EasyTools als Basis zu verwenden
-
Eingang 'InputImage' muss existieren und den Datentyp ICogIamge oder CogImage8Grey haben
-
Ausgang 'ID' muss als INT32 existieren
-
ID = 0, ID < 0, ID > 32767: Nicht zulässig. Teil wird als nicht greifbar deklariert
-
Zulässige ID 1 bis 32767: Teil wird als greifbar markiert und mit ID verheiratet
-
-
Ergebnis (RunStatus) des ToolBlocks muss Accept sein, sonst wird das Bauteil als nicht greifbar deklariert
-
Die Meldung (Message) des Werkzeuges wird automatisch in den Diagnose Text für die 'Custom ID' übernommen und in der EasyTabelle angezeigt
-
Optional Ausgang 'Graphics' (ArrayList) wird als Diagnose synchronisiert und ist bei Auswahl der Position in der EasyTabelle sichtbar
Hinweis: Diese Prüfung kann wahlweise im Auflicht oder Durchlicht ausgeführt werden.
Einlernvorgang
-
Prüfschritt aktivieren.
-
Für die Prüfung kann wahlweise zwischen Durchlicht und Auflicht gewechselt werden.
-
Mit
kann der Werkzeug Editor geöffnet werden-
Beim ersten Öffnen wird ein leerer Standard ToolBlock geladen. Dieser hat bereits alle notwendigen Eingänge und Ausgäng, aber beinhaltet keine Logik.
-
Mit
kann eine Werkzeugvorlage geladen werden. Das Auswahlfenster öffnet direkt den Pfad zu den verfügbaren EasyTools. Während dem Laden der Vorlage wird automatisch der notwendige Ausgang 'ID' als Int32 angelegt. Dieser muss in der Logik des Werkzeuges noch beschrieben werden.
-
-
Nehmen Sie ein neues Bild
auf und kontrollieren Sie, ob das Bauteil richtig erkannt wurde. -
Wenn der Werkzeug Editor geöffnet ist und ein Bauteil in der Tabelle "Erkannte Bauteile" ausgewählt wird, dann wird diese Position nochmals in den Editor geladen und ausgeführt. Dies erleichtert die Diagnose und Optimierung der Prüfung.
Beispiel
In diesem Beispiel soll direkt am Feeder geprüft werden, ob eine Ausnehmung in einem Bauteil frei ist oder verschlossen. Beide Teile sind greifbar und sollen aus dem Feeder entfernt werden. Das verschlossene Bauteil wird jedoch nicht in die Maschine, sondern in eine NIO Box abgelegt.
Bauteil IO:
Bauteil NIO:
Hinweis: Das Bauteil muss bereits vollständig eingelernt sein! Der richtige Umgang mit VisionPro Werkzeugen wird in dieser Anleitung nicht erklärt.
Schritt für Schritt:
-
Prüfschritt aktivieren.
-
Gewünschte Beleuchtung auswählen
-
Mit
den Werkzeug Editor öffnen. Dieser kann nur bei aktivem Experten Modus geöffnet werden -
Mit
das gewünschte EasyTool (in diesem Beispiel 'Messwerkzeuge' → 'Messen Segmentbreite.vpp' öffnen -
Das Werkzeug ist geladen und der Ausgang 'ID' wurde automatisch angelegt.
-
Jetzt muss das Prüffenster gesetzt werden. Dazu ein Bauteil in der Tabelle auswählen:
-
Das Werkzeug 'Prueffenster' öffnen und den Suchbereich definieren
Sollten mehrere Bauteile am Feeder sein, dann den Bereich manuell auf X = 0 und Y = 0 setzen, damit das Fenster am richtigen Bauteil ausgerichtet wird.
-
Werkzeug parametrieren (Eingänge, Overlays per EasyTools Grafiken Editor, ...)
Kontrast Min = 75, Messe dunkles Segment = false, Breite Min = 23, Breite Max = 27
-
Ausgang 'ID' im Werkzeug Code mit Funktion versehen.
-
Wenn der gemessene Abstand in der Toleranz ist, dann soll ID = 1 und Werkzeugstatus Accept sein
-
Ist der Abstand außerhalb der Toleranz, dann soll ID 2 sein und Werkzeugstatus Accept
-
Im Fehlerfall (Werzeugfehler) wird der Werkzeugstatus auf Error gesetzt und das Bauteil nicht greifbar
-
-
Codeeditor
öffnen und 'Erstellen' → 'Schnittstellenterminals prüfen' drücken, damit der Ausgang 'ID' über das Script zugreifbar ist-
Am Anfang des Scriptes den Ausgang 'ID' mit 0 initialisieren (Zeile 54)
-
Je nach Messergebnis 'ID' auf 1 oder 2 setzen (Zeile96 + Zeile 100)
-
Wenn eine Messung durchgeführt wurde, dann Werkzeugstatus auf Accept setzen (Zeile 111)
KopierenAuszug/// <summary>
/// Called when the parent tool is run.
/// Add code here to customize or replace the normal run behavior.
/// </summary>
/// <param name="message">Sets the Message in the tool's RunStatus.</param>
/// <param name="result">Sets the Result in the tool's RunStatus</param>
/// <returns>True if the tool should run normally,
/// False if GroupRun customizes run behavior</returns>
public override bool GroupRun(ref string message, ref CogToolResultConstants result)
{
#region Tool initialisieren
//Erzeuge einen neuen Record und lösche die Graphics ab
easyToolContainer.CreateNewRecord(this.Inputs.InputImage);
//Prüfe Inputs auf Gültigkeit
easyToolContainer.ToolBlockInputInRange(RelDotNet.nameof(() => this.Inputs.PARAM_Kontrast_Min), 1, 255);
easyToolContainer.ToolBlockInputInRange(RelDotNet.nameof(() => this.Inputs.THRESHOLD_Breite_Min), 0, 9999);
easyToolContainer.ToolBlockInputInRange(RelDotNet.nameof(() => this.Inputs.THRESHOLD_Breite_Max), this.Inputs.THRESHOLD_Breite_Min, 9999);
//Variablendeklaration
double width = 0;
bool found = false;
bool passed = false;
CogCompositeShape lines = null;
double contrast = 0;
System.Drawing.Font font = new Font("Arial", 12, FontStyle.Regular); //Schriftart für den Ergebnistext
System.Globalization.NumberFormatInfo format = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.Clone() as System.Globalization.NumberFormatInfo;
format.NumberDecimalDigits = (int) easyToolContainer.GetUserDataVariable("numDigits");
// Initialisiere Ausgänge
this.Outputs.RESULT_Breite = width;
this.Outputs.Passed = found;
this.Outputs.RESULT_Kontrast = contrast;
this.Outputs.ID = 0;
//Zuordnung der RunParams
this.Tools.Prueffenster.RunParams.Edge0Polarity = this.Inputs.PARAM_Messe_dunkles_Segment ? CogCaliperPolarityConstants.LightToDark : CogCaliperPolarityConstants.DarkToLight;
this.Tools.Prueffenster.RunParams.Edge1Polarity = this.Inputs.PARAM_Messe_dunkles_Segment ? CogCaliperPolarityConstants.DarkToLight : CogCaliperPolarityConstants.LightToDark;
this.Tools.Prueffenster.RunParams.Edge0Position = (this.Inputs.THRESHOLD_Breite_Min + this.Inputs.THRESHOLD_Breite_Max) / 4 * -1;
this.Tools.Prueffenster.RunParams.Edge1Position = (this.Inputs.THRESHOLD_Breite_Min + this.Inputs.THRESHOLD_Breite_Max) / 4;
#endregion
if ( this.Inputs.Found )
{
//Alle Werkzeuge ausführen
foreach(ICogTool tool in Tools)
RunTool(tool, ref message, ref result);
//Extrahiere Einheit
string unit = easyToolContainer.GetUnitFromImage(this.Tools.Prueffenster.InputImage);
#region Ergebnisse holen und prüfen
if ( this.Tools.Prueffenster.RunStatus.Result == CogToolResultConstants.Accept)
{
if ( this.Tools.Prueffenster.Results != null )
{
CogCaliperResults caliper = this.Tools.Prueffenster.Results;
if (caliper.Count > 0)
{
found = true;
width = caliper[0].Width;
message = string.Format("{0}{3} (Min: {1}{3} / Max: {2}{3})",
width.ToString("N", format),
this.Inputs.THRESHOLD_Breite_Min.ToString("N",format),
this.Inputs.THRESHOLD_Breite_Max.ToString("N",format),
unit);
lines = caliper[0].CreateResultGraphics(CogCaliperResultGraphicConstants.Edges);
contrast = System.Math.Abs(caliper[0].Edge0.Contrast);
if ( contrast > System.Math.Abs(caliper[0].Edge0.Contrast))
contrast = System.Math.Abs(caliper[0].Edge0.Contrast);
if ( ( width >= this.Inputs.THRESHOLD_Breite_Min ) && ( width <= this.Inputs.THRESHOLD_Breite_Max ) )
{
passed = true;
this.Outputs.ID = 1;
}
else
{
this.Outputs.ID = 2;
}
}
}
if ( found == false )
{
result = CogToolResultConstants.Reject;
message = easyToolContainer.GetLocalizedText("Segment (Kantenpaar) nicht gefunden", "Segment (edge pair) not found");
}
else if (passed == false)
{
result = CogToolResultConstants.Accept;
message = string.Format(easyToolContainer.GetLocalizedText("Ausserhalb Toleranz: {0}{3} (Min: {1}{3}, Max: {2}{3})", "Out of range: {0} (Min: {1}{3}, Max: {2}{3})"),
width.ToString("N", format),
this.Inputs.THRESHOLD_Breite_Min.ToString("N", format),
this.Inputs.THRESHOLD_Breite_Max.ToString("N", format),
unit);
}
}
else
{
result = this.Tools.Prueffenster.RunStatus.Result;
message = this.Tools.Prueffenster.RunStatus.Message;
}
#endregion
#region Grafiken hinzufügen
CogColorConstants resultColor = passed ? CogColorConstants.Green : CogColorConstants.Red;
//Füge Suchregion als Overlay hinzu
if ( !found || (bool) easyToolContainer.GetUserDataVariable("alwaysShowSearchRegion") )
easyToolContainer.AddRegion(this.Tools.Prueffenster.Region, this.Inputs.InputImage.SelectedSpaceName, resultColor, GraphicsType.SearchRegion);
if (found)
{
CogLineSegment first = GetLineSegmentFromShape(lines, 0);
CogLineSegment second = GetLineSegmentFromShape(lines, 1);
//Füge gefundene Kanten hinzu
if ( (bool) easyToolContainer.GetUserDataVariable("showEdges") )
{
first.SelectedSpaceName = this.Inputs.InputImage.SelectedSpaceName;
first.Color = resultColor;
Reliste.VisionPro.Extensions.RelGraphics.SetTipText(first, string.Format(easyToolContainer.GetLocalizedText("Erste Kante X/Y: {0}/{1}", "First edge X/Y: {0}/{1}"), first.MidpointX.ToString("N", format) + unit, first.MidpointY.ToString("N", format) + unit));
easyToolContainer.AddOverlay(first, GraphicsType.Result);
second.SelectedSpaceName = this.Inputs.InputImage.SelectedSpaceName;
second.Color = resultColor;
Reliste.VisionPro.Extensions.RelGraphics.SetTipText(second, string.Format(easyToolContainer.GetLocalizedText("Zweite Kante X/Y: {0}/{1}", "Second edge X/Y: {0}/{1}"), second.MidpointX.ToString("N", format) + unit, second.MidpointY.ToString("N", format) + unit));
easyToolContainer.AddOverlay(second, GraphicsType.Result);
}
if ( (bool) easyToolContainer.GetUserDataVariable("showDistance") )
{
//Füge Hilfslinien hinzu
CogLineSegment distance = new CogLineSegment();
distance.SelectedSpaceName = this.Inputs.InputImage.SelectedSpaceName;
distance.SetStartEnd(first.MidpointX, first.MidpointY, second.MidpointX, second.MidpointY);
double distExtLine = (double) easyToolContainer.GetUserDataVariable("distanceExtensionLine");
if ( distExtLine != 0)
{
distance = Reliste.VisionPro.Extensions.RelMath.CreateParallelLineSegment(distance, Math.Abs(distExtLine), distExtLine > 0 ? GraphicsDirection.Right : GraphicsDirection.Left);
CogLineSegment helpStart = new CogLineSegment();
CogLineSegment helpEnd = new CogLineSegment();
helpStart.SelectedSpaceName = this.Inputs.InputImage.SelectedSpaceName;
helpEnd.SelectedSpaceName = this.Inputs.InputImage.SelectedSpaceName;
helpStart.Color = (CogColorConstants) easyToolContainer.GetUserDataVariable("colorExtensionLine");
helpEnd.Color = (CogColorConstants) easyToolContainer.GetUserDataVariable("colorExtensionLine");
helpStart.SetStartEnd(distance.StartX, distance.StartY, first.MidpointX, first.MidpointY);
helpEnd.SetStartEnd(distance.EndX, distance.EndY, second.MidpointX, second.MidpointY);
easyToolContainer.AddOverlay(helpStart, GraphicsType.Custom);
easyToolContainer.AddOverlay(helpEnd, GraphicsType.Custom);
}
//Füge Abstand hinzu
distance.Color = resultColor;
distance.StartPointAdornment = CogLineSegmentAdornmentConstants.SolidArrow;
distance.EndPointAdornment = CogLineSegmentAdornmentConstants.SolidArrow;
Reliste.VisionPro.Extensions.RelGraphics.SetTipText(distance, string.Format(easyToolContainer.GetLocalizedText("Breite: {0}", "Width: {0}"), width.ToString("N", format) + unit));
easyToolContainer.AddOverlay(distance, GraphicsType.Result);
CogGraphicLabel label = new CogGraphicLabel();
label.SelectedSpaceName = this.Inputs.InputImage.SelectedSpaceName;
label.Color = resultColor;
label.BackgroundColor = (CogColorConstants) easyToolContainer.GetUserDataVariable("backgroundColorLabel");
label.SetXYText(distance.MidpointX, distance.MidpointY, width.ToString("N", format) + unit);
label.Rotation = distance.Rotation;
label.Alignment = CogGraphicLabelAlignmentConstants.BottomCenter;
label.Font = font;
easyToolContainer.AddOverlay(label, Reliste.VisionPro.Extensions.GraphicsType.Result);
}
}
#endregion
}
else
{
result = CogToolResultConstants.Error;
message = easyToolContainer.GetLocalizedText("Positionsreferenz nicht gefunden!", "Position reference not valid!");
}
//Synchronisiert alle Grafiken in das Graphics Array
easyToolContainer.Run(ref message, ref result);
this.Outputs.RESULT_Breite = width;
this.Outputs.Passed = passed;
this.Outputs.RESULT_Kontrast = contrast;
return false;
} -
-
Nehmen Sie ein neues Bild
auf und Ergebnisse kontrollieren. Die Ergebnistabelle zeigt nun die ID an -
Durch das Auswählen eines Bauteiles in der Tabelle, werden die Diagnose Overlays (inkl. Custom ID Overlays) angezeigt
Die Kollisionsprüfung berücksichtigt die Kollisionskonturen des Greifers und prüft diese gegen
-
die Ränder der Plattform
-
die Kontur des Bunkers (Zuführung)
Wichtig: Da die Störkontur des Bunker höher ist als die der Plattform, sind die Störkonturen für beide Ebenen getrennt zu definieren!
Hinweis: Durch die integrierte Prüfung des Greifers gegen die Störkonturen wird der Taktzeitverlust minimiert und die Ausbringung des Gesamtsystems optimiert.
Einlernvorgang
-
Prüfschritt aktivieren.
-
'Störkontur Plattform' in den Parametern der Kollisionsprüfung mit
definieren und mit
übernehmen. -
'Greiferprüfung gegen Plattform' in den Parametern der Kollisionsprüfung mit
definieren und mit
übernehmen. -
'Störkontur Bunker' in den Parametern der Kollisionsprüfung mit
definieren und mit
übernehmen. -
'Greiferprüfung gegen Bunker' in den Parametern der Kollisionsprüfung mit
definieren und mit
übernehmen. -
Nehmen Sie ein neues Bild
auf und kontrollieren Sie, ob das Bauteil richtig erkannt wurde.
Parameter
Die Parameter für die Prüfung werden im unteren Bereich des Prüfschritte-Leiste angezeigt:
| Funktion | Beschreibung |
|---|---|
| Störkontur Plattform | Störkontur der Plattform im Bild. Hier sollte der Bereich ungefähr in den Randbereich von Platte zu Behälterrand gezeichnet werden. |
| Greiferprüfung gegen Plattform | Störkontur des Greifers auf Höhe des Plattformrandes. |
| Störkontur Bunker | Störkontur des Bunkers im Bild. Aus Sicherheitsgründen wird empfohlen diese etwas weiter in das Bild einstehen zu lassen, um die perspektivischen Verzerrungen des Objektivs in diesem Bereich auszugleichen. |
| Greiferprüfung gegen Bunker | Störkontur des Greifers auf Höhe des Bunkers. |
Beispiel
In diesem Beispiel sind 2 Bauteile greifbar und 2 Bauteile haben eine Kollision mit Plattform und dem Bunker.





















































